/***************************************************************************
 创建者: hualei
 开始时间: 2018-10-15
<<<<<<< HEAD
 copyright: (C) 华友高科
=======
 copyright: (C) 华友高新
>>>>>>> origin/master
 修改说明: (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 example (1) hualei 2018-10-15 类的具体实现代码编写

 ***************************************************************************
 *  LOAD_MAP 加载地图指令具体实现                                                                       *
 ***************************************************************************/
#ifndef LOADMAPINSTRUCTIONLOGIC_H
#define LOADMAPINSTRUCTIONLOGIC_H

#include "instructionEnum.h"
#include "GeneralDefine.h"
#include "loadmapinstruction.h"

class ProgramSet;
class McControllerThread;
class ProgramEngine;

/**
 * @brief The LoadMapInstructionLogic class         LOAD_MAP 加载地图指令具体实现类
 */
class LoadMapInstructionLogic
{

public:

    /**
     * @brief LoadMapInstructionLogic           加载地图指令实现类
     * @param robotIdIn                         机器编号
     * @param programSetIn                      程序集合
     * @param programEngineIn                   程序解释引擎
     * @param programMcControllerIn             程序算法
     */
    explicit LoadMapInstructionLogic(int robotIdIn, ProgramSet* programSetIn,ProgramEngine* programEngineIn,
                                     McControllerThread *programMcControllerIn);


    /**
     * @brief startLoadMap                      开始执行LOAD_MAP加载地图指令
     * @param programNumIn                      程序编号
     * @param instructionIn                     加载地图指令，保存所需参数
     * @param lineIndex                         指令执行时的行号
     * @return                                  指令执行状态
     */
    E_PROGRAM_LOOP_RESULT startLoadMap(int programNumIn, const LoadMapInstruction &instructionIn, int lineIndex);

private:

    /**
     * @brief addMsg
     * @param messageLevel
     * @param componentName
     * @param messageType
     * @param messageCode
     * @param robotId
     * @param parameter1
     * @param parameter2
     * @param parameter3
     * @param parameter4
     * @param message
     */
    void addMsg( int messageLevel,
                 std::string componentName,
                 std::string messageType,
                 int messageCode,
                 int robotId,
                 int parameter1 = 0,
                 int parameter2 = 0,
                 int parameter3 = 0,
                 int parameter4 = 0,
                 QString message= "");

private:

    /**
     * @brief robotId                   机器编号
     */
    int robotId;

    /**
     * @brief programSet                程序集合指针
     */
    ProgramSet* programSet;

    /**
     * @brief programMcController       算法线程指针
     */
    McControllerThread *programMcController;

    /**
     * @brief programEngine             程序解释引擎指针
     */
    ProgramEngine* programEngine;

};

#endif // LOADMAPINSTRUCTIONLOGIC_H
